テストツールでLoadScene -> UnloadAsync した時だけ発生するバグ


概要

UnityTestTool、便利なんだけど、一点面白い挙動を見つけた。

特定条件下でUnloadSceneAsyncが失敗する。


通常のPlayでは発生せず、UnityTestの中でだけ失敗する。安心(?)



再現リポジトリ

https://github.com/sassembla/TestWithLoadSyncThenUnloadAsync/tree/master



対象

Unity2017.3.1p4、Unity2017.4.0f1

ほかにもあるかもしれないが検証は各位の宿題とする。



条件

UnityTestの中で、LoadSceneを使う + そのシーンをUnloadAsyncしようとすると、UnloadAsyncがnullを返してきて詰む。


次のようなLoadSceneAsyncを使ったコードだと平気で、

[UnityTest]

public IEnumerator Async()

{

    var cor = UnityEngine.SceneManagement.SceneManager.LoadSceneAsync("Assets/AutoyaTests/RuntimeData/bundledScene.unity", UnityEngine.SceneManagement.LoadSceneMode.Additive);

    while (!cor.isDone)

    {

        yield return null;

    }


    var unloadCor = UnityEngine.SceneManagement.SceneManager.UnloadSceneAsync("Assets/AutoyaTests/RuntimeData/bundledScene.unity");

    while (!unloadCor.isDone)

    {

        yield return null;

    }

}



次のような、LoadSceneを使ったコードだと、unloadCorがnullで吹っ飛んでくる。

[UnityTest]

public IEnumerator Sync()

{

    UnityEngine.SceneManagement.SceneManager.LoadScene("Assets/AutoyaTests/RuntimeData/bundledScene.unity", UnityEngine.SceneManagement.LoadSceneMode.Additive);


    var unloadCor = UnityEngine.SceneManagement.SceneManager.UnloadSceneAsync("Assets/AutoyaTests/RuntimeData/bundledScene.unity");

    while (!unloadCor.isDone)

    {

        yield return null;

    }

}


再現リポジトリのUnityTestを実行すると、Asyncは通過して、Syncは失敗する。


こちらからは以上です。レポートしとこ。